home *** CD-ROM | disk | FTP | other *** search
- dec true, false : truval ;
- infix :: : 4 ;
- infix is_in : 3 ;
- infix U : 4 ;
- infix subtr : 5 ;
- infix intersect : 5 ;
- infix subset : 5 ;
- infix *** : 5 ;
- infix and : 5 ;
- infix or : 4 ;
- typevar alpha;
- typevar beta ;
- type stream == num ;
- dec _ : alpha;
- data set(alpha) == nil_set ++ cons_set(alpha X set alpha) ;
- dec is_in : (alpha X set(alpha) ) -> truval ;
- dec U : ( set alpha X set alpha ) -> set alpha ;
- dec set_add : alpha X set alpha -> set alpha ;
- dec subtr : set alpha X set alpha -> set alpha ;
- dec intersect : set alpha X set alpha -> set alpha ;
- dec subset : set alpha X set alpha -> truval ;
- dec split : set alpha -> ( set alpha X set alpha) ;
- dec singleton_split : set alpha -> (alpha X set alpha) ;
- dec cardinal : set alpha -> num;
- dec map_set : (alpha -> beta) X set alpha -> set beta ;
- dec *** : (alpha X beta -> beta) X (set(alpha) X beta) -> beta ;
- data list(alpha) == nil ++ alpha :: list(alpha)
- ++ lcons(alpha X list(alpha));
- infix + , - : 5 ;
- infix * , div , mod : 6 ;
- infix = , < , > , /= , =< , >= : 6 ;
- infix <> : 4 ;
- dec + , - , * , div , mod : (num X num) -> num ;
- dec not : truval -> truval ;
- dec < , =< , > , >= , /= : (alpha X alpha) -> truval ;
- dec = : (alpha X alpha) -> truval ;
- dec <> : list alpha X list alpha -> list alpha ;
- dec print : alpha -> alpha ;
- dec pr : list char -> void ;
- dec prstrlst : list(list(char)) X stream -> void ;
- dec crlf : char ;
- dec and, or : (truval X truval) -> truval ;
- dec open_out_stream : list char -> stream ;
- dec open_in_stream : list char -> stream ;
- dec close_stream : stream -> void ;
- dec putch : stream X char -> void ;
- dec getch : stream -> char ;
- dec eof_char : char ;
- dec lazyread : stream -> list( char) ;
- dec input : list( char) -> list( char) ;
- dec output : list( char) -> (char -> void);
- dec undefined : alpha ;
- dec newname : list char -> list char ;
- --- set_add(x,y) <= {x} U y ;
-
- !--- map_set(_,nil_set)
- ! <= nil_set;
-
- !--- map_set(f,cons_set(x,y))
- ! <= set_add(f(x),map_set(f,y)) ;
-
- !--- f *** (nil_set,b)
- ! <= b ;
-
- !--- f *** (cons_set(x,y),b)
- ! <= f *** (y,f(x,b)) ;
-
- dec P : set(alpha) # set(set (alpha)) -> set (set (alpha));
- dec Power : set(alpha) # set(set(alpha)) # set (set(alpha)) # num # num ->
- set(set(alpha));
- dec power_set : set alpha -> set(set alpha);
-
-
- --- P(S,S1) <= (lambda (S2,SD) => SD U
- map_set((lambda x => cons_set(x,S2)),(S subtr S2))) ***
- (S1,nil_set);
-
- --- Power(S,S1,S2,n,m)
- <= S2 if n = m
- else let p == P(S,S1) in
- Power(S,p,p U S2,n+1,m);
- --- power_set( S)
- <= let p== cons_set(nil_set,nil_set)
- in Power( S, p, p, 0, cardinal( S)) ;
-
- --- lazyread( n)
- <= let k== getch( n)
- in if( k = eof_char)
- then let _ == close_stream( n)
- in k::nil
- else lcons( k, lazyread( n)) ;
- --- input( x)
- <= lazyread( open_in_stream( x)) ;
- --- output( x)
- <= let n== open_out_stream( x)
- in( lambda c=> if( c = eof_char)
- then ! let _ == ! close_stream( n)
- ! in pr(crlf ::nil)
- else putch( n, c)) ;
- --- not(true) <= false ;
- --- not(false) <= true ;
- dec error : alpha -> beta ;
- --- error(x) <= undefined(pr(x)) ;